package com.test.factory;

import com.test.exception.BeansException;
import java.util.Map;

/**
 * ListableBeanFactory接口继承自BeanFactory，提供了获取所有Bean的列表和按类型获取所有Bean的功能
 */
public interface ListableBeanFactory extends BeanFactory {
    /**
     * 根据类型获取所有注册的Bean实例
     *
     * @param type 要获取的Bean类型
     * @param <T>  泛型参数，表示Bean的类型
     * @return 包含所有该类型Bean实例的Map，键为Bean名称，值为Bean实例
     * @throws BeansException 如果获取Bean实例时出现错误
     */
    <T> Map<String, T> getBeansOfType(Class<T> type) throws BeansException;

    /**
     * 获取所有注册的Bean定义的名称
     *
     * @return 包含所有Bean定义名称的数组
     */
    String[] getBeanDefinitionNames();

    /**
     * 检查是否包含指定名称的Bean定义
     *
     * @param beanName 要检查的Bean名称
     * @return 如果包含指定名称的Bean定义则返回true，否则返回false
     */
    boolean containsBeanDefinition(String beanName);
}
